// #include"RoomStd.h"
// #include<iostream>

// using namespace std;
// int main(){
//     RoomStd room(1);

//     cout
//     <<room.getRoomID()<<endl// Output: 1
//     <<room.getMatchCount()<<endl// Output: 5
//     <<room.getCurRound()<<endl;// Output: 1

//     auto pfLists = room.getPFLists();
//     for(int i=0;i<pfLists.size();i++){
//         auto pfList = pfLists[i];
//         auto items = pfList.getItems();

//         for(int j=0;j<items.size();j++){
//             for(int k=0;k<items[j].size();k++){
//                 cout<<items[j][k].toString()<<endl;
//             }
//         }
//     }

//     auto ptr=room.getStateManager();

// }

#include "RoomStd.h"
#include <cassert>
#include <iostream>

void testRoomStdHappyPath() {
    RoomStd room(1);

    assert(room.getRoomID() == 1);
    assert(room.getMatchCount() == 5);
    assert(room.getCurRound() == 1);

    auto pfLists = room.getPFLists();
    assert(!pfLists.empty());

    for (int i = 0; i < pfLists.size(); i++) {
        auto pfList = pfLists[i];
        auto items = pfList.getItems();

        for (int j = 0; j < items.size(); j++) {
            for (int k = 0; k < items[j].size(); k++) {
                cout<<items[j][k].toString()<<endl;
            }
        }
    }

    auto stateManager = room.getStateManager();
    assert(stateManager != nullptr);
}

void testRoomStdEdgeCases() {
    // Test with a non-positive room ID
    RoomStd roomInvalidId(-1);
    assert(roomInvalidId.getRoomID() == -1);

    // Test with a room ID of zero
    RoomStd roomZeroId(0);
    assert(roomZeroId.getRoomID() == 0);

    // Test match count and current round are initialized correctly
    RoomStd room(1);
    assert(room.getMatchCount() == 5);
    assert(room.getCurRound() == 1);

    // Test PFLists are not empty
    auto pfLists = room.getPFLists();
    assert(!pfLists.empty());

    // Test items in PFLists are not empty
    for (int i = 0; i < pfLists.size(); i++) {
        auto pfList = pfLists[i];
        auto items = pfList.getItems();

        assert(!items.empty());
        for (int j = 0; j < items.size(); j++) {
            for (int k = 0; k < items[j].size(); k++) {
                cout<<items[j][k].toString()<<endl;
            }
        }
    }

    // Test StateManager pointer is not null
    auto stateManager = room.getStateManager();
    assert(stateManager != nullptr);
}


int main() {
    // testRoomStdHappyPath();
    // testRoomStdEdgeCases();
    cout<<static_cast<int>(RoomState::AssignPF)<<endl;
    cout<<static_cast<int>(RoomState::Ban)<<endl;
    return 0;
}